]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
appDisplay: Disconnect Main item-drag signals on icons destruction
authorMarco Trevisan (Treviño) <mail@3v1n0.net>
Fri, 9 Aug 2019 21:27:57 +0000 (23:27 +0200)
committerMarco Trevisan (Treviño) <mail@3v1n0.net>
Fri, 9 Aug 2019 21:30:52 +0000 (23:30 +0200)
Icons connect to overview's item-drag events to react to start/end drags,
however the icons should disconnect from signals once destroyed.

So, disconnect from Main events once the actors have been destroyed.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1511

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/677

js/ui/appDisplay.js

index 9a81887480894da5d037305d601e1ca9fe703d1e..50b8fd9b9dcafbdc27df2e7b349a24afa6e37305 100644 (file)
@@ -1433,10 +1433,10 @@ var FolderIcon = class FolderIcon {
 
         this.view = new FolderView(this._folder, id, parentView);
 
-        Main.overview.connect('item-drag-begin',
-                              this._onDragBegin.bind(this));
-        Main.overview.connect('item-drag-end',
-                              this._onDragEnd.bind(this));
+        this._itemDragBeginId = Main.overview.connect(
+            'item-drag-begin', this._onDragBegin.bind(this));
+        this._itemDragEndId = Main.overview.connect(
+            'item-drag-end', this._onDragEnd.bind(this));
 
         this.actor.connect('clicked', this.open.bind(this));
         this.actor.connect('destroy', this.onDestroy.bind(this));
@@ -1450,6 +1450,9 @@ var FolderIcon = class FolderIcon {
     }
 
     onDestroy() {
+        Main.overview.disconnect(this._itemDragBeginId);
+        Main.overview.disconnect(this._itemDragEndId);
+
         this.view.actor.destroy();
 
         if (this._spaceReadySignalId) {
@@ -1870,8 +1873,10 @@ var AppIcon = class AppIcon {
             });
         }
 
-        Main.overview.connect('item-drag-begin', this._onDragBegin.bind(this));
-        Main.overview.connect('item-drag-end', this._onDragEnd.bind(this));
+        this._itemDragBeginId = Main.overview.connect(
+            'item-drag-begin', this._onDragBegin.bind(this));
+        this._itemDragEndId = Main.overview.connect(
+            'item-drag-end', this._onDragEnd.bind(this));
 
         this.actor.connect('destroy', this._onDestroy.bind(this));
 
@@ -1883,6 +1888,9 @@ var AppIcon = class AppIcon {
     }
 
     _onDestroy() {
+        Main.overview.disconnect(this._itemDragBeginId);
+        Main.overview.disconnect(this._itemDragEndId);
+
         if (this._folderPreviewId > 0) {
             GLib.source_remove(this._folderPreviewId);
             this._folderPreviewId = 0;